package is202.hrms.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;


/** Dette er en entitets-klasse som er koblet til en database-tabell.
 * Tabellnavnet vil bli det samme som navnet på entiteten. I dette tilfellet
 * vil tabellen i databasen bli kalt FORELESNING.
 * 
 * @author Sondre
 */
@Entity
public class Forelesning implements Serializable {

    private static final long serialVersionUID = 42L;

    /** @ID-annotasjonen blir brukt til å gjøre forelesningsNr til en primær-
     * nøkkel. @GeneratedValue er en annotasjon som autogenererer primærnøkkel-
     * verdier.
     */
    @Id
    @GeneratedValue
    private long forelesningNr;


    /** NotNull-annotasjonen er en constraint som gjør slik at attributtet "navn"
     * må inneholde en verdi. 
     * Size-annotasjonen spesifiserer ved bruk av (min = 1) at lengden på 
     * verdien som blir satt inn er minst ett tall/en bokstav, etc.
     */
    @NotNull
    @Size(min = 1)
    private String navn;
    
    private String tema;
    
    private String dato;
    
    private String kommentar;

    /** OneToMany-annotasjonen markerer forelesninger som et en-til-mange-forhold.
     * mappedBy-parameteret indikerer hva som er fremmednøkkelen. I dette tilfellet
     * er det ingen fremmednøkkel, da det ikke er et en-til-mange-forhold, og
     * derfor er ikke fremmednøkkelen spesifisert.
     */
    @OneToMany(mappedBy = "")
    private List<Forelesning> forelesninger;


    /** Getters and setters */
    public Forelesning() {
        forelesninger = new ArrayList<Forelesning>();
    }

    public long getForelesningNr() {
        return forelesningNr;
    }

    public void setForelesningNr(long forelesningNr) {
        this.forelesningNr = forelesningNr;
    }

     public String getNavn() {
        return navn;
    }

    public void setNavn(String navn) {
        this.navn = navn;
    }

    public String getTema() {
        return tema;
    }

    public void setTema(String tema) {
        this.tema = tema;
    }
    
    public String getDato() {
        return dato;
    }
    
    public void setDato(String dato) {
        this.dato = dato;
    }
    
    public String getKommentar() {
        return kommentar;
    }

    public void setKommentar(String kommentar) {
        this.kommentar = kommentar;
    }

    public List<Forelesning> getForelesninger() {
        return forelesninger;
    }

    /** hashCode() and equals() must be overridden, and they must be
     * consistent. If a.equals(b) then a.hashCode() == b.hashCode() must alse
     * be true */
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + (int) (this.forelesningNr ^ (this.forelesningNr >>> 32));
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }

        Forelesning other = (Forelesning) obj;
        if (forelesningNr != other.forelesningNr) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(forelesningNr);
        sb.append(" ");
        sb.append(navn);
        sb.append(tema);
        sb.append(dato);
        sb.append(kommentar);
//        sb.append(" {");
//        for (Forelesning forelesning : forelesninger) {
//            sb.append(" ");
//            sb.append(emp);
//        }
//        sb.append(" }");

        return sb.toString();
    }
}
